import REGION_DATA from 'china-area-data'
import {cloneDeep} from 'lodash-es'

// code转汉字大对象
const CodeToText = {}
// 汉字转code大对象
const TextToCode = {}
const provinceObject = REGION_DATA['86'] // 省份对象
const regionData = []
let provinceAndCityData = []

CodeToText[''] = '全部'

// 计算省
for (const prop in provinceObject) {
    regionData.push({
        value: prop, // 省份code值
        label: provinceObject[prop] // 省份汉字
    })
    CodeToText[prop] = provinceObject[prop]
    TextToCode[provinceObject[prop]] = {
        code: prop
    }
    TextToCode[provinceObject[prop]]['全部'] = {
        code: ''
    }
}
// 计算市
for (let i = 0, len = regionData.length; i < len; i++) {
    const provinceCode = regionData[i].value
    const provinceText = regionData[i].label
    const provinceChildren = []
    for (const prop in REGION_DATA[provinceCode]) {
        provinceChildren.push({
            value: prop,
            label: REGION_DATA[provinceCode][prop]
        })
        CodeToText[prop] = REGION_DATA[provinceCode][prop]
        TextToCode[provinceText][REGION_DATA[provinceCode][prop]] = {
            code: prop
        }
        TextToCode[provinceText][REGION_DATA[provinceCode][prop]]['全部'] = {
            code: ''
        }
    }
    if (provinceChildren.length) {
        regionData[i].children = provinceChildren
    }
}
provinceAndCityData = cloneDeep(regionData)

// 计算区
for (let i = 0, len = regionData.length; i < len; i++) {
    const province = regionData[i].children
    const provinceText = regionData[i].label
    if (province) {
        for (let j = 0, len = province.length; j < len; j++) {
            const cityCode = province[j].value
            const cityText = province[j].label
            const cityChildren = []
            for (const prop in REGION_DATA[cityCode]) {
                cityChildren.push({
                    value: prop,
                    label: REGION_DATA[cityCode][prop]
                })
                CodeToText[prop] = REGION_DATA[cityCode][prop]
                TextToCode[provinceText][cityText][REGION_DATA[cityCode][prop]] = {
                    code: prop
                }
            }
            if (cityChildren.length) {
                province[j].children = cityChildren
            }
        }
    }
}

// 添加“全部”选项
const provinceAndCityDataPlus = cloneDeep(provinceAndCityData)
provinceAndCityDataPlus.unshift({
    value: '',
    label: '全部'
})
for (let i = 0, len = provinceAndCityDataPlus.length; i < len; i++) {
    const province = provinceAndCityDataPlus[i].children
    if (province && province.length) {
        province.unshift({
            value: '',
            label: '全部'
        })
        for (let j = 0, len = province.length; j < len; j++) {
            const city = province[j].children
            if (city && city.length) {
                city.unshift({
                    value: '',
                    label: '全部'
                })
            }
        }
    }
}

const regionDataPlus = cloneDeep(regionData)
regionDataPlus.unshift({
    value: '',
    label: '全部'
})
for (let i = 0, len = regionDataPlus.length; i < len; i++) {
    const province = regionDataPlus[i].children
    if (province && province.length) {
        province.unshift({
            value: '',
            label: '全部'
        })

        for (let j = 0, len = province.length; j < len; j++) {
            const city = province[j].children
            if (city && city.length) {
                city.unshift({
                    value: '',
                    label: '全部'
                })
            }
        }
    }
}
//--begin--@updateBy:liusq----date:20210922---for:省市区三级联动需求方法-----
//省份数据
const provinceOptions = []
for (const prop in provinceObject) {
    provinceOptions.push({
        value: prop, // 省份code值
        label: provinceObject[prop] // 省份汉字
    })
}
/**
 * 根据code获取下拉option的数据
 * @param code
 * @returns []
 */
function getDataByCode(code){
    let data=[];
    for (const prop in REGION_DATA[code]) {
        data.push({
            value: prop, // 省份code值
            label: REGION_DATA[code][prop] // 省份汉字
        })
    }
    return data;
}

/**
 * 获取全部省市区的层级
 * @type {Array}
 */
const pca = [];
Object.keys(provinceObject).map(province=>{
    pca.push({id:province, text:provinceObject[province], pid:'86', index:1});
    const cityObject = REGION_DATA[province];
    Object.keys(cityObject).map(city=>{
        pca.push({id:city, text:cityObject[city], pid:province, index:2});
        const areaObject = REGION_DATA[city];
        if(areaObject){
            Object.keys(areaObject).map(area=>{
                pca.push({id:area, text:areaObject[area], pid:city, index:3});
            })
        }
    })
});

/**
 * 根据code反推value
 * @param code
 * @param level
 * @returns {Array}
 */
function getRealCode(code,level){
    let arr = [];
    getPcode(code, arr, level);
    return arr;
}
function getPcode(id, arr, index){
    for(let item of pca){
        if(item.id === id && item.index == index){
            arr.unshift(id)
            if(item.pid != '86'){
                getPcode(item.pid, arr, --index)
            }
        }
    }
}
//--end--@updateBy:liusq----date:20210922---for:省市区三级联动需求方法-----
export {provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode,getDataByCode,provinceOptions,getRealCode}
